# coding=utf-8
# 代码文件：chapter12/ch12.3.3.py
import tkinter as tk
from tkinter import filedialog, messagebox, INSERT, END

window = tk.Tk()

window.title('文件对话框！')
window.geometry('800x500')


def onClick1():
    filetypes = [('Python文件', '*.py'),
                 ('文本文件', '*.txt'),
                 ('所有文件', '*.*')]
    # 选择单个文件，返回文件名
    ret = filedialog.askopenfilename(title='选择单个文件',
                                     initialdir='~/Desktop',
                                     filetypes=filetypes)
    print(ret)
    if ret is None or ret == '':
        messagebox.showwarning('选择文件', '未选中任何文件！')
    else:
        messagebox.showinfo('选择文件', ret)


def onClick2():
    # 选择多个文件，返回多个文件名的元组
    ret = filedialog.askopenfilenames()
    if ret is None or ret == '':
        messagebox.showwarning('选择文件', '未选中任何文件！')
    else:
        messagebox.showinfo('选择文件', ret)


def onClick3():
    # 选择目录，返回目录名
    ret = filedialog.askdirectory()
    if ret is None or ret == '':
        messagebox.showwarning('选择目录', '未选中任何目录！')
    else:
        messagebox.showinfo('选择目录', ret)


def onClick4():
    filetypes = [('csv文件', '*.csv'),
                 ('文本文件', '*.txt'),
                 ('所有文件', '*.*')]
    # 选择并打开文件，返回文件对象
    fd = filedialog.askopenfile(title='选择文本文件',
                                initialdir='./data',
                                filetypes=filetypes)
    if fd is None:
        messagebox.showwarning('选择目录', '未选中任何文件！')
    else:
        # 读取文件内容
        content = fd.read()
        # 在text控件后面追加文本
        text.insert(END, content)
        # 在text控件中插入文本
        # text.insert(INSERT, content)


button1 = tk.Button(window, text='选择单个文件', command=onClick1)
button2 = tk.Button(window, text='选择多个文件', command=onClick2)
button3 = tk.Button(window, text='选择目录', command=onClick3)
button4 = tk.Button(window, text='读取csv文件内容', command=onClick4)

text = tk.Text(window)  # 创建text控件

# 添加按钮控件到窗口
button1.pack(fill=tk.BOTH)
button2.pack(fill=tk.BOTH)
button3.pack(fill=tk.BOTH)
button4.pack(fill=tk.BOTH)
text.pack(fill=tk.BOTH)

window.mainloop()
